package com.sh.utils;

import com.sh.pojo.dto.ResourcePathLevelDTO;
import com.sh.pojo.dto.ResourceTreeDTO;

import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class CommonUtils {
    /**
     * 获取redis权限key
     */
    public static String getPermissionKey(String resourceType,String userId, String bucketNm) {
        return String.format("%s_%s_%s", resourceType, userId, bucketNm);
    }

    /**
     *根据目录路径获取所有父路径（包含当前路径）
     */
    public static List<String> getParentFolders(String folderPath) {
        Path path = Paths.get(folderPath);
        List<String> folders = new ArrayList<>();
        // 逐级获取父路径，直到没有更多的父路径
        while (path.getParent() != null) {
            path = path.getParent();
            folders.add(path.toString());
        }
        folders.add(folderPath);
        return folders;
    }

    //从路径中提取最后一级目录名
    public static String getLastDirectoryName(String commonPrefix) {
        // 去掉最后的 '/' 并提取最后一级目录名
        commonPrefix = commonPrefix.endsWith("/") ? commonPrefix.substring(0, commonPrefix.length() - 1) : commonPrefix;
        int lastSlashIndex = commonPrefix.lastIndexOf("/");
        return commonPrefix.substring(lastSlashIndex + 1);
    }
    // 获取父目录路径
    public static String getParentDirectory(String dir) {
        // 确保路径以 '/' 结尾
        if (!dir.endsWith("/")) {
            dir += "/";
        }

        // 去掉最后的 '/'
        String trimmedDir = dir.substring(0, dir.length() - 1);

        // 获取最后一个 '/' 的位置
        int lastSlashIndex = trimmedDir.lastIndexOf("/");

        // 如果没有找到父目录，返回空
        if (lastSlashIndex == -1) {
            return "";
        }

        // 返回父目录路径
        return trimmedDir.substring(0, lastSlashIndex + 1);
    }

    // 递归收集目录树中的所有路径
    public static List<ResourcePathLevelDTO> collectPaths(List<ResourceTreeDTO> resourceTree) {
        List<ResourcePathLevelDTO> pathList = new ArrayList<>();

        if(resourceTree==null||resourceTree.isEmpty()){
            return pathList;
        }
        for (ResourceTreeDTO node : resourceTree) {
            ResourcePathLevelDTO pathLevelDTO=new ResourcePathLevelDTO();
            pathLevelDTO.setPath(node.getPath());
            pathLevelDTO.setLevel(node.getLevel());
            // 添加当前节点的路径到列表
            pathList.add(pathLevelDTO);

            // 如果有子节点，递归收集子节点的路径
            if (node.getChildren() != null && !node.getChildren().isEmpty()) {
                pathList.addAll(collectPaths(node.getChildren()));
            }
        }
        return pathList;
    }

    public static String removeKeyword(String input, String keyword) {
        if (input == null || keyword == null || !input.startsWith(keyword)) {
            return input;
        }

        // 使用 substring 方法从关键字的长度开始截取
        return input.substring(keyword.length());
    }
}
